package parser;

import org.apache.commons.digester.Digester;
import org.apache.commons.digester.xmlrules.DigesterLoader;
import org.xml.sax.SAXException;

import java.io.IOException;

/**
 * @author 石小俊
 * @date 2024年03月29日 20:05
 */
public class DigesterParser {
    public static void main(String[] args) {
        // 获取解析器,此时需要对rule.xml进行解析
        // 此时的解析不需要开发者实现,直接调用依赖中提供的方法进行解析即可
        // 解析后返回解析器
        Digester digester = DigesterLoader.createDigester(DigesterParser.class.getClassLoader().getResource("parser/rule.xml"));

        // 准备一个空的根标签所对应的Java对象
        ClassBean classBean = new ClassBean();

        // 将该对象交给解析器,用于接收解析结果
        digester.push(classBean);

        // 解析
        try {
            System.out.println("解析前:" + classBean);
            digester.parse(DigesterParser.class.getClassLoader().getResourceAsStream("students.xml"));
            System.out.println("解析后:" + classBean);
            System.out.println("获取学号为1的学生姓名:" + classBean.findStudent("1").getName());
            System.out.println("获取学号为2的学生姓名:" + classBean.findStudent("2").getName());
            System.out.println("获取学号为1的学生性别:" + classBean.findStudent("1").getGender());
            System.out.println("获取学号为2的学生性别:" + classBean.findStudent("2").getGender());
        } catch (IOException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        }
    }
}
